home *** CD-ROM | disk | FTP | other *** search
- PROGRAM VGAInfo; {$R-,S-,X+,V-,A-}
-
- USES DOS,Crt;
-
- CONST Monat:ARRAY [0..13] OF STRING[3]=(
- '???','Jan','Feb','Mär','Apr','Mai','Jun',
- 'Jul','Aug','Sep','Okt','Nov','Dez','???');
-
- VAR i:BYTE;
- Regs:Registers;
- Block:ARRAY [0..511] OF BYTE;
- NamensString:STRING[12];
-
- FUNCTION HexForm(x:BYTE):STRING;
- CONST Ziffer:ARRAY[0..15] OF CHAR='0123456789ABCDEF';
- BEGIN
- HexForm[0]:=#2;
- HexForm[1]:=Ziffer[x SHR $4];
- HexForm[2]:=Ziffer[x AND $F];
- END;
-
- FUNCTION LeadZero(x:BYTE):STRING;
- VAR Ergebnis:STRING[2];
- BEGIN
- STR(x:2,Ergebnis);
- IF Ergebnis[1]=' ' THEN Ergebnis[1]:='0';
- LeadZero:=Ergebnis;
- END;
-
- PROCEDURE DatumAusgeben(DatumsZahl:LONGINT);
- VAR Datum:DateTime;
- BEGIN
- UnPackTime(DatumsZahl,Datum);
- Write(Datum.Day:2,'.');
- Write(Monat[Datum.Month]:3,'.');
- Write(Datum.Year,' ');
- Write(Datum.Hour:2,':');
- Write(LeadZero(Datum.Min),'.');
- Write(LeadZero(Datum.Sec),' ');
- END;
-
- PROCEDURE AttributeAusgeben(Attribs:BYTE);
- BEGIN
- IF NamensString[1]=CHR(229) THEN BEGIN
- TextColor(TextAttr OR Blink);
- Write('gelöscht');
- END ELSE BEGIN
- IF BOOLEAN(Attribs AND 128) THEN Write('G') ELSE Write('-');
- IF BOOLEAN(Attribs AND 64) THEN Write('O') ELSE Write('-');
- IF BOOLEAN(Attribs AND 32) THEN Write('A') ELSE Write('-');
- IF BOOLEAN(Attribs AND 16) THEN Write('D') ELSE Write('-');
- IF BOOLEAN(Attribs AND 8) THEN Write('V') ELSE Write('-');
- IF BOOLEAN(Attribs AND 4) THEN Write('S') ELSE Write('-');
- IF BOOLEAN(Attribs AND 2) THEN Write('H') ELSE Write('-');
- IF BOOLEAN(Attribs AND 1) THEN Write('R') ELSE Write('-');
- END;
- ClrEOL;
- END;
-
- FUNCTION CallInt25(Lfw,Start,Anz:WORD;Buff:POINTER):BOOLEAN; {nach: DOS-Tool 3/92, S.290}
- INLINE(
- $8C/$DE/$8B/$FD/
- $5B/$1F/$59/$5A/$58/$56/$57/
- $CD/$25/$B3/$00/$72/$04/$43/$EB/$03/
- $CF/
- $2B/$C0/
- $0E/$E8/$FFF9/
- $5D/$1F/$A3/>DOSError/$8A/$C3
- );
-
- PROCEDURE DiskettenInfo(Laufwerk:BYTE);
- LABEL Ausgang;
- VAR Zahl:LONGINT;
- DirStart,Eintraege,Attr:BYTE;
- BEGIN
- Regs.AH:=$00; {Controller Reset}
- Regs.DL:=Laufwerk;
- Intr($13,Regs);
- DirStart:=0;
- IF CallInt25(Laufwerk,0,1,@Block) THEN BEGIN
- TextColor(Yellow);
- NamensString[0]:=CHR(8); Move(Block[3],NamensString[1],8);
- Write(NamensString,' ',HexForm(Block[$27]),HexForm(Block[$28]),
- '-',HexForm(Block[$29]),HexForm(Block[$2A]));
- IF COPY(NamensString,1,6)='VGACPY' THEN BEGIN
- Write(' ');
- Move(Block[$27],Zahl,4);
- DatumAusgeben(Zahl);
- END;
- WriteLn(#10#13);
- DirStart:=1+Block[$10]*Block[$16];
- IF DirStart>0 THEN BEGIN
- Eintraege:=0;
- REPEAT
- CallInt25(Laufwerk,DirStart,1,@Block);
- FOR i:=0 TO 15 DO BEGIN
- TextColor(LightGray);
- TextBackground(Black);
- NamensString[0]:=CHR(12);
- Move(Block[i*32],NamensString[1],12);
- INSERT('.',NamensString,9);
- IF NamensString[1]=CHR(0) THEN GOTO Ausgang;
- INC(Eintraege);
- Attr:=Block[i*32+11];
- IF (COPY(NamensString,10,3)='EXE') OR
- (COPY(NamensString,10,3)='COM') OR
- (COPY(NamensString,10,3)='BAT') THEN TextBackground(Red);
- IF BOOLEAN(Attr AND VolumeID) THEN TextBackground(Blue);
- IF BOOLEAN(Attr AND Directory) THEN TextBackground(Green);
- Write(NamensString,' ');
- Move(Block[i*32+28],Zahl,4);
- Write(Zahl:8,' ');
- Move(Block[i*32+22],Zahl,4);
- DatumAusgeben(Zahl);
- AttributeAusgeben(Attr);
- TextBackground(Black);
- WriteLn;
- IF KeyPressed THEN BEGIN
- ReadKey;
- Write('Beliebige Taste zum fortsetzen drücken ...');
- REPEAT UNTIL ReadKey<>#0;
- GotoXY(1,WhereY);
- ClrEOL;
- END;
- END;
- INC(DirStart);
- UNTIL false;
- END;
- Ausgang:
- TextColor(13);
- Write(#10#13,Eintraege,' Einträge, ');
- Write('Kapazität ist ',DiskSize(Laufwerk+1),' Bytes,');
- WriteLn(' davon ',DiskFree(Laufwerk+1),' Bytes frei.');
- TextColor(White);
- END ELSE BEGIN
- TextColor(LightGray);
- WriteLn('Keine Diskette im Laufwerk !');
- Halt(1);
- END;
- END;
-
- BEGIN
- IF ParamCount<>1 THEN BEGIN
- WriteLn(#10+'VGA-Info'+#10+#13+'========'+#10);
- WriteLn('Ein kleiner Directory-Lister für alle (auch gelöschte!) Dateien auf Diskette.');
- WriteLn('Public-Domain-Zugabe zu VGA-Copy. Weiterverarbeitung ausdrücklich erlaubt !'+#10);
- WriteLn('Syntax: VGAINFO <Laufwerk A: oder B:>');
- END ELSE BEGIN
- NamensString:=COPY(FExpand(ParamStr(1)+'.'),1,1);
- DiskettenInfo(ORD(NamensString[1])-65);
- END;
- END.
-